<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
  // 返回一个新函数, 新函数内部会调用原函数, 且指定了原函数中的this为bind的第一个参数
  Function.prototype.bind = function (thisObj, ...args1) {
    console.log('bind()')
    // this就原函数
    const _this = this
    return function (...args2) {
      return _this.call(thisObj, ...args1, ...args2)
    }
  }
  </script>
  <script>
    function fn(a, b) {
      console.log('fn', this, a, b)
      return a + b
    }
    const obj = {
      m: 1
    }

    /* 
    bind: 
    简单表达: 它用来绑定this
    详细表达: 返回一个新函数, 新函数内部会调用原函数, 且指定了原函数中的this为bind的第一个参数
    */
    const fn2 = fn.bind(obj, 4)
    console.log(fn2(2, 3))
  </script>
</body>
</html>